package com.yc.fav.service.impl;

import com.yc.fav.entity.FavFavorite;
import com.yc.fav.entity.FavTag;
import com.yc.fav.entity.FavTagFavorite;
import com.yc.fav.mapper.FavFavoriteMapper;
import com.yc.fav.mapper.FavTagFavoriteMapper;
import com.yc.fav.mapper.FavTagMapper;
import com.yc.fav.service.BizException;
import com.yc.fav.service.IFavFavoriteService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yc.fav.util.MybatisHelper;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 云收藏-收藏表-6 服务实现类
 * </p>
 *
 * @author lyl
 * @since 2022-11-06
 */
@Service
public class FavFavoriteServiceImpl extends ServiceImpl<FavFavoriteMapper, FavFavorite> implements IFavFavoriteService {
    public void add(FavFavorite ff) throws BizException {
        // 数据验证
        if ( ff.getFlabel() == null || ff.getFlabel().trim().isEmpty() ){
            throw new BizException("请填写网页名称");
        }
        if ( ff.getFurl() == null || ff.getFurl().trim().isEmpty() ){
            throw new BizException("请填写网页地址");
        }
        SqlSession session = MybatisHelper.getSession();
            try {
                FavFavoriteMapper favoriteMapper = session.getMapper(FavFavoriteMapper.class);
                FavTagMapper tagMapper = session.getMapper(FavTagMapper.class);
                FavTagFavoriteMapper tagFavoriteMapper = session.getMapper(FavTagFavoriteMapper.class);
                // 用户输入正确，则写入链接表
                favoriteMapper.insert(ff);
                // 分析 ftags 字段包含的 tag 的值
                // tag = 购物，门户，新闻
                // fav_tag : 本身有 购物 : tcount + 1
                //           没有 门户，新闻 ： 新增 并且tcount = 1
                // 再 fav_tag_favorite 表 添加关系记录
                String ftags = ff.getFtags();
                if (ftags!=null && ftags.trim().isEmpty() == false){
                    String[] tags = ftags.split("[,;，；]+");
                    for (String tag : tags) {
                        // tagMapper.update(实体对象，条件)
                        if ( tagMapper.updateTcount(tag) == 0){
                            // 没有修改到数据库这条记录，那么就要新增
                            FavTag ft = new FavTag();
                            ft.setTname(tag);
                            ft.setTcount(1);
                            tagMapper.insert(ft);
                            // 新增tag之后，在关系表中添加记录
                            FavTagFavorite ftf = new FavTagFavorite();
                            // mybatis-plus 会返回新增的id值
                            ftf.setTid(ft.getId()); // tag的id
                            ftf.setFid(ff.getId()); // favorite的id
                            tagFavoriteMapper.insert(ftf);
                        } else {
                            // tagFavoriteMapper.insert
                            // 思考如何处理这个分支
                            tagFavoriteMapper.insertByTname(ff.getId(),tag);
                        }
                }
            }
        } catch (Exception e){
                session.rollback();
                if (e instanceof BizException){
                    throw e;
                } else {
                    throw new BizException("添加链接失败！", e);
                }
        } finally {
            session.close();
        }
    }
}
